package com.sync.utils.agent.consumer;

import com.alibaba.fastjson.JSON;
import com.sync.utils.agent.pojo.ServerReq;
import com.sync.utils.agent.pojo.ServerRes;
import com.sync.utils.framework.okHttp.OkHttpUtils;
import org.springframework.stereotype.Service;

import java.util.concurrent.TimeoutException;

/**
 * TODO
 *
 * @Author YWF
 * @Date 2025/5/10 22:48
 */

//系定义注解  @AgentClient
@Service
public class AbstractAgentClient implements AgentClient {


    /**
     * 通过 @AgentClient注解，获取请求的Url,以及Header参数，如：签名 请求头数据
     * @param request
     * @return
     * @param <T>
     * @throws TimeoutException
     */
    @Override
    public <T extends ServerRes> T excute(ServerReq<T> request) throws TimeoutException {
        return excute(request,"");
    }

    /**
     * 这个方法应该暴漏到具体的客户端
     * @param request
     * @param Url
     * @return
     * @param <T>
     * @throws TimeoutException
     */
    private <T extends ServerRes> T excute(ServerReq<T> request, String Url) throws TimeoutException {
        String rs = OkHttpUtils.builder().url(Url)
                // 有参数的话添加参数，可多个
                .addBodyRaw(request)
                // 也可以添加多个
                .post(true)
                .sync();
        T serverRes = JSON.parseObject(rs, request.getServerResType());
        return serverRes;
    }
}
